﻿/*
* SCI3自定义算子 界面ui与输入链表绑定辅助类
* 使用时，请以友元类声明SMTDataBindingTools
* 例如：

protected:
	friend class SMTDataBindingTools;
	SMTDataBindingTools *m_UiTools;
//
//
*
*/




#pragma once

#include"SMTExtFuncPageUI.h"
#include"SMTExtFuncDemo.h"

#include"qmap.h"
#include<qobject.h>
#include<SMTGUI.h>
#include"qdebug.h"

class SMTOperatorGraphics;
class SMTGraphicElement;
class QColorl;
class SMTShape;
class SMTOperator;
class SMTVariableArray;
class SMTButtonBox;
class SMTSpinBox;
class SMTSwitchButton;

class SMTDataBindingTools
{
public:
	SMTDataBindingTools();
	~SMTDataBindingTools();
	SMTOperatorGraphics *mOperator;

public:
	/**
	* @brief 初始化QSpinBox控件
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param *pWidget	 QSpinBox的UI控件指针
	*/
	void InitUIControl(SMTOperator *m_opr, int ParamsIndex, QSpinBox *pWidget);

	/**
	* @brief 初始化QDoubleSpinBox控件
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param *pWidget	 QDoubleSpinBox的UI控件指针
	*/
	void InitUIControl(SMTOperator *m_opr, int ParamsIndex, QDoubleSpinBox *pWidget);

	/**
	* @brief 初始化QLineEdit控件
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param *pWidget	 QLineEdit的UI控件指针
	*/
	void InitUIControl(SMTOperator *m_opr, int ParamsIndex, QLineEdit *pWidget);

	/**
	* @brief 初始化QComboBox控件
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param *pWidget	 QComboBox的UI控件指针
	*/
	void InitUIControl(SMTOperator * m_opr, int ParamsIndex, QComboBox * pWdiget);

	/**
	* @brief 初始化SMTSwitchButton控件
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param *pWidget	 SMTSwitchButton的UI控件指针
	*/
	void InitUIControl(SMTOperator *m_opr, int ParamsIndex, SMTSwitchButton *pWidget);

	/**
	* @brief 初始化SMTSpinBox控件
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param *pWidget	 SMTSpinBox的UI控件指针
	*/
	void InitUIControl(SMTOperator *m_opr, int ParamsIndex, SMTSpinBox *pWdiget);

	/**
	* @brief 初始化SMTButtonBox控件
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param *pWidget	 SMTButtonBox的UI控件指针
	*/
	void InitUIControl(SMTOperator *m_opr, int ParamsIndex, SMTButtonBox *pWidget);

	/**
	* @brief 初始化QComboBox控件，该函数用于外部引用变量的绑定
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param *pVariableArray	 引用变量的数组指针（m_availableRef）
	* @param *type	 引用变量的类型（对应SCI的N,S,B,P与数组）
	* @param *pWidget	 QComboBox的UI控件指针
	*/
	void InitUIControl(SMTOperator *m_opr, int ParamsIndex, SMTVariableArray *pVariableArray, SMTVariable::VariableType type, QComboBox *pWidget);

	/**
	* @brief 初始化QComboBox控件，该函数用于初始化ROI矩阵的引用
	* @param *m_opr    m_opr类的指针
	* @param *pVariableArray    m_opr类的指针
	* @param *pWidget	 QComboBox的UI控件指针
	*/
	void InitROIAlignment(SMTOperator *m_opr, SMTVariableArray *pVariableArray, QComboBox *pWidget);

	/**
	* @brief 设置N变量到输入链表中
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param *value	 获取到的变量
	*/
	void GetNumberParams(SMTOperator *m_opr, int ParamsIndex, SMTNumber *value);

	/**
	* @brief 从输入链表中设置N变量
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param *value	 需要设置的变量
	*/
	void SetNumberParams(SMTOperator *m_opr, int ParamsIndex, SMTNumber value);

	/**
	* @brief 从输入链表中获取S变量类型
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param value	 获取到的变量
	*/
	void GetStirngParams(SMTOperator *m_opr, int ParamsIndex, SMTString *value);

	/**
	* @brief  设置S变量到输入链表中
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param *value	 需要设置的变量
	*/
	void SetStringParams(SMTOperator *m_opr, int ParamsIndex, SMTString value);

	/**
	* @brief 从输入链表中获取B变量类型
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param value	 获取到的变量
	*/
	void GetBoolParamas(SMTOperator *m_opr, int ParamsIndex, SMTBool *value);

	/**
	* @brief  设置B变量到输入链表中
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param *value	 需要设置的变量
	*/
	void SetBoolParamas(SMTOperator *m_opr, int ParamsInex, SMTBool value);

	/**
	* @brief 从输入链表中获取P变量类型
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param value	 获取到的变量
	*/
	void GetPointParams(SMTOperator *m_opr, int ParamsIndex, SMTPoint *value);

	/**
	* @brief  设置P变量到输入链表中
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param *value	 需要设置的变量
	*/
	void SetPointParams(SMTOperator *m_opr, int ParamsIndex, SMTPoint value);

	/**
	* @brief 从输入链表中获取N[]变量类型
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param value	 获取到的变量
	*/
	void GetNumberArrayParams(SMTOperator *m_opr, int ParamsIndex, SMTNumberArray *value);

	/**
	* @brief  设置N[]变量到输入链表中
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param value	 需要设置的变量
	*/
	void SetNumberArrayParams(SMTOperator *m_opr, int ParamsIndex, SMTNumberArray value);

	/**
	* @brief 从输入链表中获取S[]变量类型
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param *value	 获取到的变量
	*/
	void GetStringArrayParams(SMTOperator *m_opr, int ParamsIndex, SMTStringArray *value);

	/**
	* @brief  设置S[]变量到输入链表中
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param value	 需要设置的变量
	*/
	void SetStringArrayParams(SMTOperator *m_opr, int ParamsIndex, SMTStringArray value);

	/**
	* @brief 从输入链表中获取B[]变量类型
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param *value	 获取到的变量
	*/
	void GetBoolArrayParams(SMTOperator *m_opr, int ParamsIndex, SMTBoolArray *value);

	/**
	* @brief  设置B[]变量到输入链表中
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param value	 需要设置的变量
	*/
	void SetBoolArrayParams(SMTOperator *m_opr, int ParamsIndex, SMTBoolArray valued);

	/**
	* @brief 从输入链表中获取P[]变量类型
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param *value	 获取到的变量
	*/
	void GetPointArrayParams(SMTOperator *m_opr, int ParamsIndex, SMTPointArray *value);

	/**
	* @brief  设置B[]变量到输入链表中
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param value	 需要设置的变量
	*/
	void SetPointArrayParams(SMTOperator *m_opr, int ParamsIndex, SMTPointArray value);

	/**
	* @brief 从输入链表中获取ShapeArray变量类型
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param *shapeArray	 获取到的变量
	*/
	void GetShapeArrayParams(SMTOperator *m_opr, int ParamIndex, SMTShapeArray *shapeArray);

	/**
	* @brief  设置ShapeArray变量到输入链表中
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param shapeArray	 需要设置的变量
	*/
	void SetShapeArrayParams(SMTOperator *m_opr, int ParamIndex, SMTShapeArray shapeArray);

	/**
	* @brief 设置引用的变量到输入变量
	* @param *m_opr    m_opr类的指针
	* @param ParamsIndex       输入链表下标号
	* @param pVariableArray      m_availableRef链表
	* @param ParamsName      变量名
	* @param value	 需要设置的变量
	*/
	void SetReferenceParams(SMTOperator *m_opr, int ParamsIndex, SMTVariableArray *pVariableArray, QString ParamsName, const SMTRefFormat &format);

};
